package interfases;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;

import javax.swing.JLabel;

import java.awt.Font;

import javax.swing.JOptionPane;
import javax.swing.SwingConstants;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.JButton;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Set;

import javax.swing.table.DefaultTableModel;

import controladores.ControladorPerfil;

import javax.swing.ListSelectionModel;

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import org.eclipse.wb.swing.FocusTraversalOnArray;

import datas.DataNick;

import java.awt.Component;

import javax.swing.JComboBox;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import logica.Perfil;

import javax.swing.JTextField;

public class IConsultaPerfil extends JFrame {

	private static final long serialVersionUID = 3L;

	private JPanel caja;
	private JScrollPane scrollPerfiles;
	private JTable tablaPerfiles;
	private JButton cancelar;
	private JButton seleccionar;
	private JTextField titulo;
	private JLabel SeleccionarPerfil;
	private JLabel lblTipoPerfil;
	private DefaultTableModel datosTablaPerfiles;
	@SuppressWarnings("unused")
	private DefaultTableModel temp;
	@SuppressWarnings("rawtypes")
	private JComboBox comboTipoPerfil;
	private String[] lista = {"", "Cliente", "Desarrollador"};
	
	private String nick = null;
	private int tipo = 0;	
/*********************************************************************************************/

	public IConsultaPerfil() {
		
		inicializar();
		
		//ACCION DEL BOTON DE SELECCION DEL COMBOBOX DE PERFILES
		comboTipoPerfil.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				//CARGA DE CLIENTES
				if(comboTipoPerfil.getSelectedItem().toString()=="Cliente"){
					limpiarTabla(tablaPerfiles);
					cargarNickClientes();
					nick = null;
					tipo = -100;
					return;
				}
				//CARGA DE DESARROLLADORES
				if(comboTipoPerfil.getSelectedItem().toString()=="Desarrollador"){
					limpiarTabla(tablaPerfiles);
					cargarNickDesarrolladores();
					nick = null;
					tipo = 100;
					return;
				}
				//LIMPIAR TABLA
				if(comboTipoPerfil.getSelectedItem().toString()==""){
					limpiarTabla(tablaPerfiles);
					nick = null;
					tipo = 0;
					return;
				}
			}
		});
		
		//ACCION DEL MAUSE EN LA TABLA DE PERFILES
		tablaPerfiles.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				int fila = tablaPerfiles.rowAtPoint(e.getPoint());
				int columna = tablaPerfiles.columnAtPoint(e.getPoint());
				if(fila > -1 && columna > -1){
					nick = datosTablaPerfiles.getValueAt(fila, columna).toString();
				}
			}
		});
		
		//ACCION DEL TECLADO EN LA TABLA DE PERFILES
		tablaPerfiles.addKeyListener(new KeyAdapter() {
			public void keyReleased(KeyEvent e) {
				int fila = tablaPerfiles.getSelectedRow();
				nick = tablaPerfiles.getValueAt(fila, 0).toString();
			}
			
		});
	
		//ACCION DEL BOTON CANCELAR
		cancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				dispose();
			}
		});
		
		//ACCION DEL BOTON SELECCIONAR
		seleccionar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				
				if(tipo == 0 || nick == null){
					JOptionPane.showMessageDialog(null,"NO INGRESO NINGUN PERFIL");
				}
				else{
					ControladorPerfil cp = new ControladorPerfil();
					Perfil perfil = cp.obtenerDatos(nick, tipo);					
					
					IConsultaPerfil_2 frame = new IConsultaPerfil_2(perfil, tipo);
					//frame.setLocationRelativeTo(null);
					frame.setVisible(true);
				}
			}
		});
	} 
	
/************************************************************************************************************************/	
	
	//DEVUELVE NICK DE LOS CLIENTES
		private void cargarNickClientes(){
			ControladorPerfil cp = new ControladorPerfil();
			Set<DataNick> nicks = cp.listarClientes();
			
			for (DataNick perfil : nicks) {
				Object[] nick = {perfil.getNick()};
				datosTablaPerfiles.addRow(nick);
			}
		}
		
	//DEVUELVE NICK DE LOS DESARROLLADORES
		private void cargarNickDesarrolladores(){
			ControladorPerfil cp = new ControladorPerfil();
			Set<DataNick> nicks = cp.listarDesarrolladores();
			
			for (DataNick perfil : nicks) {
				Object[] nick = {perfil.getNick()};
				datosTablaPerfiles.addRow(nick);
			}
		}
	
	//LIMPIAR TABLA DE LOS PERFILES
		private void limpiarTabla(JTable tabla) {  
		  DefaultTableModel modelo = (DefaultTableModel) tabla.getModel();
		  int filas=tabla.getRowCount();
		  
		  for (int i = 0;filas>i; i++) {
			  modelo.removeRow(0);
		  }
		}
		
	//CENTRA LA PANTALLA PRINCIPAL	
		private void centrarPantalla(JFrame ventana, int x, int y){
			Toolkit t = Toolkit.getDefaultToolkit();
			Dimension pantalla = t.getScreenSize();
			int height = pantalla.height;
			int width = pantalla.width;
			int px =  (int) (width-x)/2;
			int py =  (int) (height-y)/2;
			ventana.setBounds(px, py, x, y);
		}
		
	//INICIALIZA LA PANTALLA PRINCIPAL DE CONSULTA DE PERFIL
		@SuppressWarnings({ "rawtypes", "unchecked" })
		private void inicializar(){
			setType(Type.POPUP);
			setResizable(false);
			setTitle("Consulta de Perfil");
			centrarPantalla(this, 664, 433);
			caja = new JPanel();
			caja.setBackground(new Color(255, 222, 173));
			caja.setBorder(new EmptyBorder(5, 5, 5, 5));
			setContentPane(caja);
			scrollPerfiles = new JScrollPane();
			scrollPerfiles.setBounds(100, 189, 452, 124);
			SeleccionarPerfil = new JLabel("SELECCIONE EL PERFIL:");
			SeleccionarPerfil.setBounds(100, 157, 129, 14);
			SeleccionarPerfil.setFont(new Font("Eras Medium ITC", Font.PLAIN, 12));
			lblTipoPerfil = new JLabel("TIPO PERFIL:");
			lblTipoPerfil.setBounds(100, 111, 68, 14);
			lblTipoPerfil.setFont(new Font("Eras Medium ITC", Font.PLAIN, 12));
			comboTipoPerfil = new JComboBox(lista);
			comboTipoPerfil.setBounds(284, 108, 192, 20);
			tablaPerfiles = new JTable();
			tablaPerfiles.setBackground(new Color(255, 250, 205));
			tablaPerfiles.setFillsViewportHeight(true);
			tablaPerfiles.setSurrendersFocusOnKeystroke(true);
			tablaPerfiles.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
			datosTablaPerfiles = new DefaultTableModel();
			datosTablaPerfiles.addColumn("Perfiles");	
			tablaPerfiles.setModel(datosTablaPerfiles);
			scrollPerfiles.setViewportView(tablaPerfiles);
			caja.setLayout(null);
			titulo = new JTextField();
			titulo.setEnabled(false);
			titulo.setEditable(false);
			titulo.setHorizontalAlignment(SwingConstants.CENTER);
			titulo.setForeground(new Color(255, 255, 255));
			titulo.setText("Consulta de Perfil");
			titulo.setFont(new Font("Eras Medium ITC", Font.BOLD, 20));
			titulo.setBackground(new Color(128, 0, 0));
			titulo.setBounds(0, 0, 658, 50);
			caja.add(titulo);
			titulo.setColumns(10);
			caja.add(lblTipoPerfil);
			caja.add(comboTipoPerfil);
			caja.add(SeleccionarPerfil);
			caja.add(scrollPerfiles);
			cancelar = new JButton("Cancelar");
			cancelar.setFont(new Font("Eras Medium ITC", Font.PLAIN, 13));
			cancelar.setBounds(541, 371, 107, 23);
			caja.add(cancelar);
			seleccionar = new JButton("Seleccionar");
			seleccionar.setFont(new Font("Eras Medium ITC", Font.PLAIN, 13));
			seleccionar.setBounds(418, 371, 107, 23);
			caja.add(seleccionar);
			caja.setFocusTraversalPolicy(new FocusTraversalOnArray(new Component[]{tablaPerfiles, SeleccionarPerfil, scrollPerfiles, seleccionar, cancelar}));
		}
}

